package dados.Repositorios.Lista;

import java.io.IOException;
import dados.Cliente;
import dados.Iterable;
import dados.IteratorLista;
import dados.Repositorios.RepositorioCliente;

public class RepositorioClienteLista implements RepositorioCliente, Iterable {

	private Cliente cliente;
	private RepositorioClienteLista proximo;

	public RepositorioClienteLista(){
		this.cliente = null;
		this.proximo = null;
	}

	public void inserirCliente(Cliente p)throws IOException {
		if (this.cliente == null){
			this.cliente = p;
			this.proximo = new RepositorioClienteLista();
		} else {
			this.proximo.inserirCliente(p);
		}
	}

	public void removerCliente(Cliente p) throws IOException {
		if (this.cliente != null){
			if(this.cliente.getCpf().equals(p.getCpf())){
				this.cliente = this.proximo.cliente;
				this.proximo = this.proximo.proximo;
			} else {
				this.proximo.removerCliente(p);
			}
		} else {
			throw new IOException();
		}
	}

	public Cliente procurarCliente(Cliente p) throws IOException {
		Cliente achou = null;
		if (this.cliente != null){
			if (this.cliente.getNome().equals(p.getNome())){
				achou = this.cliente;
			} else {
				achou = this.proximo.procurarCliente(p);
			}
		} else {
			throw new IOException();
		}
		return achou;
	}

	public void atualizarCliente(Cliente p) throws IOException {
		if (this.cliente != null){
			if (this.cliente.getCpf().equals(p.getCpf())){
				this.cliente = p;
			} else {
				this.proximo.atualizarCliente(p);
			}
		} else {
			throw new IOException();
		}
	}

	public boolean existeCliente (Cliente p){
		boolean resposta = false;
		if (this.cliente != null){
			if (this.cliente.getCpf().equals(p.getCpf())){
				resposta = true;
			} else {
				resposta = this.proximo.existeCliente(p);
			}
		} else {
			resposta = false;
		}
		return resposta;
	}

	public IteratorLista<Cliente> getIterator(){
		IteratorLista<Cliente> resposta = new IteratorLista<Cliente>(cliente);
		return resposta;
	}
}
